package com.example.springboot01.aware;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;

import java.io.IOException;

/**
 * @Description : 使用容器的aware接口，能够获得spring提供的服务
 * 包括：
 * 1.资源加载器
 * 2.bean工厂
 * 3.获得容器
 * 4.获取文本信息
 * 5.获得容器中的bean名称
 * 原则上，使用哪种功能就实现哪个接口
 */
@Service
public class AwareService implements BeanNameAware, ResourceLoaderAware {

    private String beanName;
    private ResourceLoader loader;


    /**
     * 重写setBeanName方法
     * springboot的context会利用此set方法，将参数传入
     *
     * @param beanName context会将beanName传入
     */
    @Override
    public void setBeanName(String beanName) {
        this.beanName = beanName;
    }

    /**
     * 重写setResourceLoader方法
     * springboot的context会利用此set方法，将参数传入
     *
     * @param resourceLoader springboot的资源加载器
     */
    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        loader = resourceLoader;
    }

    /**
     * 可以在bean内部的实例方法中使用这些组件
     */
    public void outPutResult() throws IOException {
        System.out.println("bean的名称为：" + beanName);
        Resource resource = loader.getResource("com/example/springboot01/aware/test.txt");
        System.out.println("加载的内容是：" + IOUtils.toString(resource.getInputStream()));
    }
}
